/**
 
 注意：
 可以返回局部变量的值，不能返回局部变量的地址
 如果返回地址，那么久应该将这个空间申请在堆区
 
 （1）如果返回值是字符串，那么返回值的类型就写char *
 （2）直接返回字符串常量
 
 申请在常亮去的空间，不会被回收的，直到程序结束的时候才会被回收。
 以字符指针的形式，存储在常量区的字符串数据不能改，其他存储在常量区的数据能改

 */

#import <Foundation/Foundation.h>
#include <stdlib.h>

// arr数组过了这个函数就被回收了，需要将arr数组存放在堆区
int* test1() {
    int arr[] = {29, 39, 49};
    return arr;
}

int * test2() {
    
    int *arr = calloc(3, sizeof(int));
    *arr = 20;
    *(arr+1) = 30;
    *(arr+2) = 40;
    return arr;
}

int test3() {
    int num = 10;
    return num;
}

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        int *arr = test2();
        int len = sizeof(arr)/sizeof(int);
        for (int i=0; i < 3; i ++) {
            printf("%d  ", arr[i]);
        }
        free(arr);
    }
    return 0;
}
